package com.iias.common.util.date;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;

/**
 * 时间属性对象   便于获取时间
 */
public class DateProperty implements Serializable {

    private static final long serialVersionUID = -8614923229398939330L;

    private Calendar calendar;

    public DateProperty(Date date) {
        this.calendar = Calendar.getInstance();
        calendar.setTime(date);
    }

    /**
     * 后去日历对象
     * @return
     */
    public Calendar getCalendar() {
        return calendar;
    }


    /**
     * 获取时间
     * @return
     */
    public Date getDate(){
        return calendar.getTime();
    }


    /**
     * 设置常用日期值
     * @param timeUnit
     * @param val
     */
    public void setField(TimeUnit timeUnit,int val) {
        if (timeUnit ==TimeUnit.MONTH)val++;
        calendar.set(timeUnit.getField(), val);
    }


    /**
     * 设置更多类型的 日期值
     * @param val
     * @param calendar 参照 Calendar
     */
    public void setField(int val,int calendar ){
        if (calendar == Calendar.MONTH) val--;
        this.calendar.set(calendar,val);
    }

    /**
     * 获取常用字段类型 日期值
     * @param timeUnit
     * @return
     */
    public int getField(TimeUnit timeUnit){
        if (timeUnit == TimeUnit.MONTH) return calendar.get(timeUnit.getField())+1;
        return calendar.get(timeUnit.getField());
    }


    /**
     * 年属性
     * @return
     */
    public int year(){
        return calendar.get(TimeUnit.YEAR.getField());
    }

    /**
     * 月
     * @return
     */
    public int month(){
        return calendar.get(TimeUnit.MONTH.getField())+1;
    }

    /**
     * 一年当中的第几天
     * @return
     */
    public int dayOfYear(){
        return calendar.get(TimeUnit.DAY.getField());
    }

    /**
     * 这个月中的第几天
     * @return
     */
    public int dayOfMonth(){
        return calendar.get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 这周中的第几天
     * @return
     */
    public int dayOfWeek(){
        return calendar.get(Calendar.DAY_OF_WEEK);
    }

    /**
     * 获取小时
     * @return
     */
    public int hour(){
        return calendar.get(TimeUnit.HOURS.getField());
    }

    /**
     * 获取分钟
     * @return
     */
    public int minutes(){
        return calendar.get(Calendar.MINUTE);
    }

    /**
     * 获取秒
     * @return
     */
    public int seconds(){
        return calendar.get(Calendar.SECOND);
    }

}
